<!DOCTYPE html><html><head><title>java8 日期新特性</title><meta charset='utf-8'><link href='https://cdn.maxiang.io/res-min/themes/marxico.css' rel='stylesheet'><style></style></head><body><div id='preview-contents' class='note-content'>
                        
                    



<h1 id="java8-日期新特性">java8 日期新特性</h1>



<h2 id="java8是如何处理时间及日期的">java8是如何处理时间及日期的</h2>

<div><div class="toc"><div class="toc">
<ul>
<li><a href="#java8-日期新特性">java8 日期新特性</a><ul>
<li><a href="#java8是如何处理时间及日期的">java8是如何处理时间及日期的</a><ul>
<li><a href="#1日期方法介绍">1、日期方法介绍</a></li>
<li><a href="#2获取当前日期">2、获取当前日期</a></li>
<li><a href="#3日期month月份常量介绍">3、日期Month月份常量介绍</a></li>
<li><a href="#通过-maxlength-方法获取当月最大天数">通过 maxLength() 方法获取当月最大天数</a></li>
<li><a href="#4如何在java8中获取当天的日期">4、如何在java8中获取当天的日期</a></li>
<li><a href="#5如何在java8中获取当前的年月日">5、如何在java8中获取当前的年月日</a></li>
<li><a href="#6在java8中如何获取某个特定的日期">6、在java8中如何获取某个特定的日期</a></li>
<li><a href="#7在java8中检查两个日期是否相等">7、在java8中检查两个日期是否相等</a></li>
<li><a href="#8在java8中如何检查重复事件比如生日">8、在java8中如何检查重复事件，比如生日</a></li>
<li><a href="#9如何在java8中获取当前时间">9、如何在java8中获取当前时间</a></li>
<li><a href="#10如何增加时间里面的小时数">10、如何增加时间里面的小时数</a></li>
<li><a href="#11如何获取1周后的日期">11、如何获取1周后的日期</a></li>
<li><a href="#12一年前后的日期">12、一年前后的日期</a></li>
<li><a href="#13在java8中使用时钟">13、在java8中使用时钟</a></li>
<li><a href="#14在java中如何判断某个日期在另一个日期的前面还是后面">14、在java中如何判断某个日期在另一个日期的前面还是后面</a></li>
<li><a href="#15在java8中处理不同的时区">15、在java8中处理不同的时区</a></li>
<li><a href="#16如何表示固定的日期比如信用卡过期时间">16、如何表示固定的日期，比如信用卡过期时间</a></li>
<li><a href="#17如何在java8中检查闰年">17、如何在java8中检查闰年</a></li>
<li><a href="#18两个日期之间包含多少天多少月">18、两个日期之间包含多少天，多少月</a></li>
<li><a href="#19带时区的日期与时间">19、带时区的日期与时间</a></li>
<li><a href="#20在java8中获取当前时间戳">20、在java8中获取当前时间戳</a></li>
<li><a href="#21如何在java8中使用预定义的格式器来对日期进行解析格式化">21，如何在java8中使用预定义的格式器来对日期进行解析/格式化</a></li>
<li><a href="#23如何在java8中对日期进行格式化转换成字符串">23、如何在java8中对日期进行格式化，转换成字符串</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>



<h3 id="1日期方法介绍">1、日期方法介绍</h3>



<pre class="prettyprint hljs-dark"><code class="hljs css"><div class="hljs-line"><span class="hljs-selector-tag">Java</span>三次引入处理时间的<span class="hljs-selector-tag">API</span>，<span class="hljs-selector-tag">JDK1</span><span class="hljs-selector-class">.0</span>中包含了一个<span class="hljs-selector-tag">Date</span>类，但大多数方法在
</div><div class="hljs-line"><span class="hljs-selector-tag">java1</span><span class="hljs-selector-class">.1</span>引入<span class="hljs-selector-tag">Calendear</span>类之后被弃用了。它的实例都是可变的，而且它的<span class="hljs-selector-tag">API</span>很难
</div><div class="hljs-line">使用，比如月份是从0开始这种反人类的设置。<span class="hljs-selector-tag">java8</span>引入的<span class="hljs-selector-tag">java</span><span class="hljs-selector-class">.timeAPI</span>已经纠正了之前的问题。
</div><div class="hljs-line">它已经完全实现了<span class="hljs-selector-tag">JSR310</span>规范。
</div></code></pre>



<pre class="prettyprint hljs-dark"><code class="hljs"><div class="hljs-line">java8引入了一套全新的时间日期API，本篇随笔将说明学习java8的这套API。
</div></code></pre>



<pre class="prettyprint hljs-dark"><code class="hljs applescript"><div class="hljs-line">java。<span class="hljs-built_in">time</span>包中的是类是不可变且线程安全的。新的时间及日期API位于java.<span class="hljs-built_in">time</span>中，下面是一些关键类
</div></code></pre>



<pre class="prettyprint hljs-dark"><code class="hljs lsl"><div class="hljs-line">●Instant——它代表的是时间戳
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●LocalDate——不包含具体时间的日期，比如<span class="hljs-number">2014</span><span class="hljs-number">-01</span><span class="hljs-number">-14</span>。它可以用来存储生日，周年纪念日，入职日期等。
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●LocalTime——它代表的是不含日期的时间
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●LocalDateTime——它包含了日期及时间，不过还是没有偏移信息或者说时区。
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●ZonedDateTime——这是一个包含时区的完整的日期时间，偏移量是以UTC/格林威治时间为基准的。
</div></code></pre>



<pre class="prettyprint hljs-dark"><code class="hljs stylus"><div class="hljs-line">●它提供了javax<span class="hljs-selector-class">.time</span><span class="hljs-selector-class">.ZoneId</span>用来处理时区。
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●它提供了LocalDate与LocalTime类
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●Java <span class="hljs-number">8</span>中新的时间与日期API中的所有类都是不可变且线程安全的，这与之前的Date与Calendar API中的恰好相反，那里面像java<span class="hljs-selector-class">.util</span><span class="hljs-selector-class">.Date</span>以及SimpleDateFormat这些关键的类都不是线程安全的。
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●新的时间与日期API中很重要的一点是它定义清楚了基本的时间与日期的概念，比方说，瞬时时间，持续时间，日期，时间，时区以及时间段。它们都是基于ISO日历体系的。
</div></code></pre>



<pre class="prettyprint hljs-dark"><code class="hljs"><div class="hljs-line">每个Java开发人员都应该至少了解这套新的API中的这五个类：
</div></code></pre>



<pre class="prettyprint hljs-dark"><code class="hljs gauss"><div class="hljs-line">●Instant 它代表的是时间戳，比如<span class="hljs-number">2016</span><span class="hljs-number">-04</span><span class="hljs-number">-14</span>T14:<span class="hljs-number">20</span>:<span class="hljs-number">13.592</span>Z，这可以从java.<span class="hljs-built_in">time</span>.Clock类中获取，像这样： Instant current = Clock.<span class="hljs-keyword">system</span>(ZoneId.of(<span class="hljs-string">"Asia/Tokyo"</span>)).instant();
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●LocalDate 它表示的是不带时间的日期，比如<span class="hljs-number">2016</span><span class="hljs-number">-04</span><span class="hljs-number">-14</span>。它可以用来存储生日，周年纪念日，入职日期等。
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●LocalTime - 它表示的是不带日期的时间
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●LocalDateTime - 它包含了时间与日期，不过没有带时区的偏移量
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●ZonedDateTime - 这是一个带时区的完整时间，它根据UTC/格林威治时间来进行时区调整
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●这个库的主包是java.<span class="hljs-built_in">time</span>，里面包含了代表日期，时间，瞬时以及持续时间的类。它有两个子package，一个是java.<span class="hljs-built_in">time</span>.foramt，这个是什么用途就很明显了，还有一个是java.<span class="hljs-built_in">time</span>.temporal，它能从更低层面对各个字段进行访问。
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●时区指的是地球上共享同一标准时间的地区。每个时区都有一个唯一标识符，同时还有一个地区/城市(Asia/Tokyo)的格式以及从格林威治时间开始的一个偏移时间。比如说，东京的偏移时间就是+<span class="hljs-number">09</span>:<span class="hljs-number">00</span>。
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●OffsetDateTime类实际上包含了LocalDateTime与ZoneOffset。它用来表示一个包含格林威治时间偏移量（+/-小时：分，比如+<span class="hljs-number">06</span>:<span class="hljs-number">00</span>或者 <span class="hljs-number">-08</span>：<span class="hljs-number">00</span>）的完整的日期（年月日）及时间（时分秒，纳秒）。
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●DateTimeFormatter类用于在Java中进行日期的格式化与解析。与SimpleDateFormat不同，它是不可变且线程安全的，如果需要的话，可以赋值给一个静态变量。DateTimeFormatter类提供了许多预定义的格式器，你也可以自定义自己想要的格式。当然了，根据约定，它还有一个<span class="hljs-built_in">parse</span>()方法是用于将字符串转换成日期的，如果转换期间出现任何错误，它会抛出DateTimeParseException异常。类似的，DateFormatter类也有一个用于格式化日期的<span class="hljs-keyword">format</span>()方法，它出错的话则会抛出DateTimeException异常。
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">●再说一句，“MMM d yyyy”与“MMm dd yyyy”这两个日期格式也略有不同，前者能识别出<span class="hljs-string">"Jan 2 2014"</span>与<span class="hljs-string">"Jan 14 2014"</span>这两个串，而后者如果传进来的是<span class="hljs-string">"Jan 2 2014"</span>则会报错，因为它期望月份处传进来的是两个字符。为了解决这个问题，在天为个位数的情况下，你得在前面补<span class="hljs-number">0</span>，比如<span class="hljs-string">"Jan 2 2014"</span>应该改为<span class="hljs-string">"Jan 02 2014"</span>。
</div></code></pre>



<pre class="prettyprint hljs-dark"><code class="hljs lsl"><div class="hljs-line">final   Clock clock = Clock.systemUTC();
</div><div class="hljs-line">final  LocalDate date = LocalDate.now();
</div><div class="hljs-line">final  ZonedDateTime zonedDatetime = ZonedDateTime.now();
</div><div class="hljs-line"><span class="hljs-comment">// Duration类，它持有的时间精确到秒和纳秒。这使得我们可以很容易得计算</span>
</div><div class="hljs-line"><span class="hljs-comment">//两个日期之间的不同，例子代码如下：</span>
</div><div class="hljs-line">final  LocalDateTime from = LocalDateTime.of( <span class="hljs-number">2014</span>, Month.APRIL, <span class="hljs-number">16</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span> );
</div><div class="hljs-line">final  LocalDateTime to = LocalDateTime.of( <span class="hljs-number">2015</span>, Month.APRIL, <span class="hljs-number">16</span>, <span class="hljs-number">23</span>, <span class="hljs-number">59</span>, <span class="hljs-number">59</span> );
</div><div class="hljs-line">final  Duration duration = Duration.between( from, to );
</div></code></pre>



<h3 id="2获取当前日期">2、获取当前日期</h3>



<pre class="prettyprint hljs-dark"><code class="hljs cs"><div class="hljs-line">@<span class="hljs-function">Test</span>
</div><div class="hljs-line"><span class="hljs-function">    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span>  <span class="hljs-title">test1</span>(<span class="hljs-params"></span>)</span>{
</div><div class="hljs-line">        <span class="hljs-comment">// 日期</span>
</div><div class="hljs-line">        System.<span class="hljs-keyword">out</span>.println(DateUtils.format(Date.<span class="hljs-keyword">from</span>(clock.instant()),<span class="hljs-string">"YYYY-MM-dd HH:mm:ss"</span>));
</div><div class="hljs-line">        <span class="hljs-comment">// 时间戳</span>
</div><div class="hljs-line">        System.<span class="hljs-keyword">out</span>.println(clock.millis());
</div><div class="hljs-line">        <span class="hljs-comment">// 精确到天</span>
</div><div class="hljs-line">        System.<span class="hljs-keyword">out</span>.println(date);
</div><div class="hljs-line">        <span class="hljs-comment">// 精确到天</span>
</div><div class="hljs-line">        System.<span class="hljs-keyword">out</span>.println(LocalDate.now(clock));
</div><div class="hljs-line">        System.<span class="hljs-keyword">out</span>.println(zonedDatetime);
</div><div class="hljs-line">        System.<span class="hljs-keyword">out</span>.println( ZonedDateTime.now( clock ) );
</div><div class="hljs-line">        System.<span class="hljs-keyword">out</span>.println( <span class="hljs-string">"Duration in days: "</span> + duration.toDays() );
</div><div class="hljs-line">        System.<span class="hljs-keyword">out</span>.println( <span class="hljs-string">"Duration in hours: "</span> + duration.toHours() );
</div><div class="hljs-line">    }
</div></code></pre>

<blockquote>
  <blockquote>
    <p>运行结果</p>
  </blockquote>
</blockquote>



<p><img src="16367C33AB8B4C27B2AADDA8CFF04983" alt="image" title=""></p>



<h3 id="3日期month月份常量介绍">3、日期Month月份常量介绍</h3>



<pre class="prettyprint hljs-dark"><code class="hljs cs"><div class="hljs-line"><span class="hljs-comment">/**</span>
</div><div class="hljs-line"><span class="hljs-comment"> * java.time.Month 是枚举类型，由 12 个常量组成，代表 1 月至 12 月</span>
</div><div class="hljs-line"><span class="hljs-comment"> *</span>
</div><div class="hljs-line"><span class="hljs-comment"> */</span>
</div><div class="hljs-line">@<span class="hljs-function">Test</span>
</div><div class="hljs-line"><span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">test2</span>(<span class="hljs-params"></span>) </span>{
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.JANUARY   : "</span> + Month.JANUARY);<span class="hljs-comment">// 1 月</span>
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.FEBRUARY  : "</span> + Month.FEBRUARY);<span class="hljs-comment">// 2 月</span>
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.MARCH     : "</span> + Month.MARCH);<span class="hljs-comment">// 3 月</span>
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.APRIL     : "</span> + Month.APRIL);<span class="hljs-comment">// 4 月</span>
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.MAY       : "</span> + Month.MAY);<span class="hljs-comment">// 5 月</span>
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.JUNE      : "</span> + Month.JUNE);<span class="hljs-comment">// 6 月</span>
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.JULY      : "</span> + Month.JULY);<span class="hljs-comment">// 7 月</span>
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.AUGUST    : "</span> + Month.AUGUST);<span class="hljs-comment">// 8 月</span>
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.SEPTEMBER : "</span> + Month.SEPTEMBER);<span class="hljs-comment">// 9 月</span>
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.OCTOBER   : "</span> + Month.OCTOBER);<span class="hljs-comment">// 10 月</span>
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.NOVEMBER  : "</span> + Month.NOVEMBER);<span class="hljs-comment">// 11 月</span>
</div><div class="hljs-line">    System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"Month.DECEMBER  : "</span> + Month.DECEMBER);<span class="hljs-comment">// 12 月</span>
</div><div class="hljs-line">}
</div></code></pre>

<blockquote>
  <blockquote>
    <p>运行结果</p>
  </blockquote>
</blockquote>



<p><img src="B15CCFC8E9B44A689B2307AC9A3D0AC7" alt="image" title=""></p>



<h3 id="通过-maxlength-方法获取当月最大天数">通过 maxLength() 方法获取当月最大天数</h3>



<pre class="prettyprint hljs-dark"><code class="hljs css"><div class="hljs-line"><span class="hljs-comment">/**</span>
</div><div class="hljs-line"><span class="hljs-comment"> * 通过 maxLength() 方法获取当月最大天数</span>
</div><div class="hljs-line"><span class="hljs-comment"> *</span>
</div><div class="hljs-line"><span class="hljs-comment"> */</span>
</div><div class="hljs-line">@<span class="hljs-keyword">Test</span>
</div><div class="hljs-line">public void test3() {
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>(" 1月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.JANUARY</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>(" 2月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.FEBRUARY</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>(" 3月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.MARCH</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>(" 4月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.APRIL</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>(" 5月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.MAY</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>(" 6月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.JUNE</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>(" 7月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.JULY</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>(" 8月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.AUGUST</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>(" 9月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.SEPTEMBER</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>("10月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.OCTOBER</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>("11月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.NOVEMBER</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">    <span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.out</span><span class="hljs-selector-class">.println</span>("12月最大天数 : " + <span class="hljs-selector-tag">Month</span><span class="hljs-selector-class">.DECEMBER</span><span class="hljs-selector-class">.maxLength</span>());
</div><div class="hljs-line">}
</div></code></pre>

<blockquote>
  <blockquote>
    <p>运行结果</p>
  </blockquote>
</blockquote>



<p><img src="141195F920154B66A9C5D43199BB944D" alt="image" title=""></p>



<h3 id="4如何在java8中获取当天的日期">4、如何在java8中获取当天的日期</h3>



<pre class="prettyprint hljs-dark"><code class="hljs stylus"><div class="hljs-line">java8中有个叫LocalDate的类，能用来表示今天的日期。这个类与java<span class="hljs-selector-class">.util</span><span class="hljs-selector-class">.Date</span>
</div><div class="hljs-line">略有不同，因为它只包含日期，没有时间。
</div></code></pre>



<p><img src="098E4C5C3D0C44CF8123879B9288CA0F" alt="image" title=""></p>



<pre class="prettyprint hljs-dark"><code class="hljs"><div class="hljs-line">可以看到，他创建了今天的日期却不包含时间信息，并且格式化了日期。
</div></code></pre>



<h3 id="5如何在java8中获取当前的年月日">5、如何在java8中获取当前的年月日</h3>



<pre class="prettyprint hljs-dark"><code class="hljs objectivec"><div class="hljs-line">LocalDate类中提供了一些很方便的方法可以用来提取年月日以及其他的日期属性,
</div><div class="hljs-line">特别方便，只需要使用对应的<span class="hljs-keyword">getter</span>方法就可以了，非常直观
</div></code></pre>



<p><img src="B30E5FB5714948ECAB612417AEE43A1A" alt="image" title=""></p>



<h3 id="6在java8中如何获取某个特定的日期">6、在java8中如何获取某个特定的日期</h3>



<pre class="prettyprint hljs-dark"><code class="hljs lsl"><div class="hljs-line">通过另一个方法，可以创建出任意一个日期，它接受年月日的参数，然后返回一个等价的LocalDate实例。
</div><div class="hljs-line">在这个方法里，需要的日期你填写什么就是什么，不想之前的API中月份必须从<span class="hljs-number">0</span>开始
</div></code></pre>



<p><img src="905F0DBFB706448F9C404B7CA765E740" alt="image" title=""></p>



<h3 id="7在java8中检查两个日期是否相等">7、在java8中检查两个日期是否相等</h3>



<pre class="prettyprint hljs-dark"><code class="hljs applescript"><div class="hljs-line">LocalDate重写了<span class="hljs-keyword">equals</span>方法来进行日期的比较，如下所示：
</div></code></pre>



<p><img src="7B92024E3C734A289A476319D8CE8003" alt="image" title=""></p>



<h3 id="8在java8中如何检查重复事件比如生日">8、在java8中如何检查重复事件，比如生日</h3>



<pre class="prettyprint hljs-dark"><code class="hljs ceylon"><div class="hljs-line">在java中还有一个与时间日期相关的任务就是检查重复事件，比如每月的账单日
</div><div class="hljs-line"><wbr>
</div><div class="hljs-line">如何在java中判断是否是某个节日或者重复事件，使用MonthDay类。这个类由月日组合，不包含年信息，
</div><div class="hljs-line">可以用来代表每年重复出现的一些日期或其他组合。他和新的日期库中的其他类一样也都是不可变且线程安全的，
</div><div class="hljs-line">并且它还是一个值类（<span class="hljs-keyword">value</span> <span class="hljs-keyword">class</span>）。
</div></code></pre>



<p><img src="C0B100736ED244CAAD8F8CE5F0FF9E33" alt="image" title=""></p>



<pre class="prettyprint hljs-dark"><code class="hljs"><div class="hljs-line">通过列子可以看到MonthDay只存储了月日，对比两个日期的月日即可知道是否重复
</div></code></pre>



<h3 id="9如何在java8中获取当前时间">9、如何在java8中获取当前时间</h3>



<pre class="prettyprint hljs-dark"><code class="hljs css"><div class="hljs-line">这个与第一个例子获取当前日期非常相似，这里用的是<span class="hljs-selector-tag">LocalTime</span>类，
</div><div class="hljs-line">默认的格式是<span class="hljs-selector-tag">hh</span><span class="hljs-selector-pseudo">:mm</span><span class="hljs-selector-pseudo">:ss</span><span class="hljs-selector-pseudo">:nnn</span>可以看到，这个时间是不包含日期的
</div></code></pre>



<p><img src="26452C730DC34EF98781753E7BB03244" alt="image" title=""></p>



<h3 id="10如何增加时间里面的小时数">10、如何增加时间里面的小时数</h3>



<pre class="prettyprint hljs-dark"><code class="hljs mipsasm"><div class="hljs-line">很多时候需要对时间进行操作，比如加一个小时来计算之后的时间，<span class="hljs-keyword">java8提供了更</span>
</div><div class="hljs-line"><span class="hljs-keyword"></span>方便的方法 如plusHours，这些方法返回的是一个新的LocalTime实例的引用，
</div><div class="hljs-line">因为LocalTime是不可变的
</div></code></pre>



<p><img src="D62107B44294400CAB8073D8B3766DB4" alt="image" title=""></p>



<h3 id="11如何获取1周后的日期">11、如何获取1周后的日期</h3>



<pre class="prettyprint hljs-dark"><code class="hljs lsl"><div class="hljs-line">这个与前一个获取<span class="hljs-number">2</span>小时后的时间的例子很相似，这里我们获取的是<span class="hljs-number">1</span>周后的日期。
</div><div class="hljs-line">LocalDate是用来表示无时间的日期，他又一个plus()方法可以用来增加日，星期，
</div><div class="hljs-line">月，ChronoUnit则用来表示时间单位，LocalDate也是不可变的，因此任何修改操作
</div><div class="hljs-line">都会返回一个新的实例
</div></code></pre>



<p><img src="6FDB840C12384F43986052D77325762D" alt="image" title=""></p>



<pre class="prettyprint hljs-dark"><code class="hljs"><div class="hljs-line">可以看到一周后的日期是什么，也可以用这个方法来增加一个月，一年，一小时，一分等等
</div></code></pre>



<h3 id="12一年前后的日期">12、一年前后的日期</h3>



<pre class="prettyprint hljs-dark"><code class="hljs gradle"><div class="hljs-line">在上个例子中我们使用了LocalDate的<span class="hljs-keyword">plus</span>()方法来给日期增加日周月，现在我们用<span class="hljs-keyword">minus</span>()方法来找出一年前的那天
</div></code></pre>



<p><img src="F8FCDFDC8554478C916B2EAB55A7E754" alt="image" title=""></p>



<h3 id="13在java8中使用时钟">13、在java8中使用时钟</h3>



<pre class="prettyprint hljs-dark"><code class="hljs css"><div class="hljs-line"><span class="hljs-selector-tag">java8</span>自带了<span class="hljs-selector-tag">Clock</span>类，可以用来获取某个时区下（所以对时区是敏感的）当前的瞬时时间、日期。用来代替<span class="hljs-selector-tag">System</span><span class="hljs-selector-class">.currentTimelnMillis</span>()与<span class="hljs-selector-tag">TimeZone</span><span class="hljs-selector-class">.getDefault</span>()方法
</div></code></pre>



<p><img src="8600084282EC4AA5933185D24340D404" alt="image" title=""></p>



<h3 id="14在java中如何判断某个日期在另一个日期的前面还是后面">14、在java中如何判断某个日期在另一个日期的前面还是后面</h3>



<pre class="prettyprint hljs-dark"><code class="hljs gcode"><div class="hljs-line">如何判断某个日期在另一个日期的前面还是后面或者相等，在java<span class="hljs-number">8</span>中，LocalDate类中使用isBefore<span class="hljs-comment">()</span>、isAfter<span class="hljs-comment">()</span>、equals<span class="hljs-comment">()</span>方法来比较两个日期。如果调用方法的那个日期比给定的日期要早的话，isBefore<span class="hljs-comment">()</span>方法会返回true。equals<span class="hljs-comment">()</span>方法在前面的例子中已经说明了，这里就不举例了
</div></code></pre>

<p><img src="85631DEC3F064EDFBB4A563AFC56A744" alt="image" title=""></p>



<pre class="prettyprint hljs-dark"><code class="hljs"><div class="hljs-line">可以看到java8中比较日期非常简单，不再需要使用Calendar这样另外的类来完成类似的任务了
</div></code></pre>



<h3 id="15在java8中处理不同的时区">15、在java8中处理不同的时区</h3>



<pre class="prettyprint hljs-dark"><code class="hljs pf"><div class="hljs-line">java8中不仅将日期和时间进行了分离，同时还有时区。比如Z<span class="hljs-keyword">on</span>Id代表的是某个特定时区，ZonedDateTime代表带时区的时间，等同于以前的GregorianCalendar类。使用该类，可以将本地时间转换成另一个时区中的对应时间
</div></code></pre>

<p>。</p>



<p><img src="CA73D0D64F2A477CB9E45F894FCDD1AD" alt="image" title=""></p>



<pre class="prettyprint hljs-dark"><code class="hljs"><div class="hljs-line">注意：对应时区的文本可以直接手动填写，也可以调用定义好了的，手动填写的时候注意不可填错了，否则你会遇到下面的异常
</div></code></pre>



<h3 id="16如何表示固定的日期比如信用卡过期时间">16、如何表示固定的日期，比如信用卡过期时间</h3>



<pre class="prettyprint hljs-dark"><code class="hljs lsl"><div class="hljs-line">正如MonthDay表示的是某个重复出现的日子，YearMonth是另外一个组合，代表的是像信用卡还款日，定期存款到期日，options到期日这类的日期。你可以用这个类找出这个月有多少天，LengthOfMonth()这个方法返回的是这个YearMonth实例有多少天，这对于检查<span class="hljs-number">2</span>月是否润<span class="hljs-number">2</span>月很有用
</div></code></pre>



<p><img src="9CF19F4A419F44E38634463E58C4289D" alt="image" title=""></p>



<h3 id="17如何在java8中检查闰年">17、如何在java8中检查闰年</h3>



<pre class="prettyprint hljs-dark"><code class="hljs gcode"><div class="hljs-line">LocalDate类由一个isLeapYear<span class="hljs-comment">()</span>方法来返回当前LocalDate对应的那年是否是闰年
</div></code></pre>



<p><img src="5D922B6D7B39436B993707E0E0FB4A3B" alt="image" title=""></p>



<h3 id="18两个日期之间包含多少天多少月">18、两个日期之间包含多少天，多少月</h3>



<pre class="prettyprint hljs-dark"><code class="hljs stylus"><div class="hljs-line">计算两个日期之间包含多少天、周、月、年。可以用java<span class="hljs-selector-class">.time</span><span class="hljs-selector-class">.Period</span>类完成该功能。下面例子中将计算日期与将来的日期之间一共有几个月
</div></code></pre>



<p><img src="7A3AC495114C48EA913CEC4C584263AC" alt="image" title=""></p>



<h3 id="19带时区的日期与时间">19、带时区的日期与时间</h3>



<pre class="prettyprint hljs-dark"><code class="hljs ada"><div class="hljs-line">在java8中，可以使用ZoneOffset来代表某个时区，可以使用它的静态方法ZoneOffset.<span class="hljs-keyword">of</span>()方法来获取对应的时区，只要获得了这个偏移量，就可以用这个偏移量和LocalDateTime创建一个新的OffsetDateTime
</div></code></pre>



<p><img src="077981E5D1FD49A9A7D73A3CC368499B" alt="image" title=""></p>



<pre class="prettyprint hljs-dark"><code class="hljs tp"><div class="hljs-line">可以看到现在时间日期和时区关联上了，注意<span class="hljs-keyword">Offset</span>DateTime主要是用来给机器理解的，平时使用就用前面结束的ZoneDateTime类就可以了
</div></code></pre>



<h3 id="20在java8中获取当前时间戳">20、在java8中获取当前时间戳</h3>



<p><img src="A14BC7B689E64A36BA375CEB62ABBAB3" alt="image" title=""></p>



<pre class="prettyprint hljs-dark"><code class="hljs excel"><div class="hljs-line">java8获取时间戳特别简单。Instant类由一个静态的工厂方法<span class="hljs-built_in">now</span>()可以返回当前时间戳
</div></code></pre>



<p><img src="A3A8433977E6417B9EDEA75FEBF4FAB0" alt="image" title=""></p>



<pre class="prettyprint hljs-dark"><code class="hljs sqf"><div class="hljs-line">可以看到，当前时间戳是包含日期和时间的，与java.util.<span class="hljs-built_in">Date</span>很类似，事实上Instant就是java8以前的<span class="hljs-built_in">Date</span>，可以使用这个两个类中的方法在这两个类型之间进行转换，比如<span class="hljs-built_in">Date</span>.<span class="hljs-keyword">from</span>(Instant)就是用来把Instant转换成java.util.<span class="hljs-built_in">date</span>的，而<span class="hljs-built_in">Date</span>。toInstant()就是将<span class="hljs-built_in">Date</span>转换成Instant的
</div></code></pre>



<h3 id="21如何在java8中使用预定义的格式器来对日期进行解析格式化">21，如何在java8中使用预定义的格式器来对日期进行解析/格式化</h3>



<pre class="prettyprint hljs-dark"><code class="hljs lsl"><div class="hljs-line">在java8之前，时间日期的格式化非常麻烦，经常使用SimpleDateFormat来进行格式化，但是SimpleDateFormat并不是线程安全的。在java8中，引入了一个全新的线程安全的日期与时间格式器。并且预定义好了格式。比如，本例中使用的BASICISODATE格式会将<span class="hljs-number">20160414</span>格式化成<span class="hljs-number">2016</span><span class="hljs-number">-04</span><span class="hljs-number">-14</span>
</div></code></pre>



<p><img src="1959B25BA646404B8374B97020E84B2F" alt="image" title=""></p>



<h3 id="23如何在java8中对日期进行格式化转换成字符串">23、如何在java8中对日期进行格式化，转换成字符串</h3>



<pre class="prettyprint hljs-dark"><code class="hljs css"><div class="hljs-line">前面的两个例子中，我们主要是对日期字符串来进行解析转换成日期，在这个例子
</div><div class="hljs-line">我们相反，是把日期转换成字符。这里我们有个<span class="hljs-selector-tag">LocalDateTime</span>类的实例，我们要把
</div><div class="hljs-line">他转换成一个格式化好的日期串，与前例相同的是，我们仍需要制定模式串去创建
</div><div class="hljs-line">一个<span class="hljs-selector-tag">DateTimeFormatter</span>类的实例，但调用的是<span class="hljs-selector-tag">LocalDate</span><span class="hljs-selector-class">.format</span>()。
</div><div class="hljs-line">这个方法会返回一个代表当前日期的字符串，对应的模式就是传入的
</div><div class="hljs-line"><span class="hljs-selector-tag">DateTimeFormatter</span>实例中定义好的。
</div></code></pre>



<p><img src="AB3075BE478C49208BC8B6AF5AFD8008" alt="image" title=""></p></div></body></html>